package com.woniuxy.cloud.carl.carlgoods.app.apiImpl;

import cn.hutool.core.bean.BeanUtil;
import com.woniuxy.cloud.carl.carlgoods.client.SkuPropValueClient;
import com.woniuxy.cloud.carl.carlgoods.client.dto.SkuPropValueDto;
import com.woniuxy.cloud.carl.carlgoods.client.param.AddSkuPropValueParam;
import com.woniuxy.cloud.carl.carlgoods.infra.mapper.PropValueMapper;
import com.woniuxy.cloud.carl.carlgoods.infra.mapper.SkuMapper;
import com.woniuxy.cloud.carl.carlgoods.infra.mapper.SkuPropValueMapper;
import com.woniuxy.cloud.carl.carlgoods.infra.model.PropValue;
import com.woniuxy.cloud.carl.carlgoods.infra.model.Sku;
import com.woniuxy.cloud.carl.carlgoods.infra.model.SkuPropValue;
import com.woniuxy.result.Result;
import lombok.extern.slf4j.Slf4j;
import org.springframework.util.Assert;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.RestController;


import javax.annotation.Resource;
import java.util.List;
@RestController
@Slf4j
@CrossOrigin("*")
public class SkuPropValueImpl implements SkuPropValueClient {
    @Resource
    private SkuMapper skuMapper;
    @Resource
    private PropValueMapper propValueMapper;
    @Resource
    private SkuPropValueMapper skuPropValueMapper;
    @Override
    public Result addSkuPropValue(AddSkuPropValueParam param) {
        Sku sku = skuMapper.selectById(param.getSkuId());
        PropValue propValue = propValueMapper.selectById(param.getPropValueId());
        Assert.state(sku!=null,"该关联商品不存在");
        Assert.state(propValue!=null,"该关联商品属性值不存在");
        SkuPropValue skuPropValue = BeanUtil.toBean(param, SkuPropValue.class);
        skuPropValueMapper.insert(skuPropValue);
        return Result.success();
    }

    @Override
    public Result<List<SkuPropValueDto>> list() {
        List<SkuPropValue> skuPropValues = skuPropValueMapper.selectList(null);
        List<SkuPropValueDto> skuPropValueDtos = BeanUtil.copyToList(skuPropValues, SkuPropValueDto.class);
        for (SkuPropValueDto skuPropValueDto : skuPropValueDtos) {
            Long propValueId = skuPropValueDto.getPropValueId();
            Long skuId = skuPropValueDto.getSkuId();
            Sku sku = skuMapper.selectById(skuId);
            PropValue propValue = propValueMapper.selectById(propValueId);
            skuPropValueDto.setSkuName(sku.getSkuName());
            skuPropValueDto.setPropValue(propValue.getPropValue());
        }

        return Result.success(skuPropValueDtos);
    }
}
